package _func

import (
	"encoding/json"
	"fmt"
	"gin/config"
	"os"
	"path/filepath"
	"time"
)

type StyleLog struct {
	File      *os.File
	FtpId     string
	creatTime int64
}

func (l *StyleLog) NewLog(ftpId string) {
	if l.File != nil {
		err := l.File.Close()
		if err != nil {
			fmt.Println("关闭旧日志文件时出错:", err)
		}
	}

	httpPath := config.LogConfig["ftp"].(map[string]interface{})["path"].(string)
	now := time.Now()
	// 使用指定格式输出年月日
	formattedDate := now.Format("20060102")

	binPath := "/ftplog_" + ftpId

	// 构建 http 目录的路径
	rootHttpPath := filepath.Join(httpPath, binPath)
	//fmt.Println("rootHttpPath：", rootHttpPath)

	err := os.MkdirAll(rootHttpPath, os.ModePerm)
	if err != nil {
		//log.Fatal(err)
	}
	filePath := filepath.Join(rootHttpPath, formattedDate+".log")
	file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
	if err != nil {
		fmt.Println("无法创建文件:", err)
		panic("日志创建文件失败")
	}
	l.creatTime = GetTodayZeroTimestamp()
	l.FtpId = ftpId
	l.File = file
}

// GetTodayZeroTimestamp 该函数用于获取今日 0 点的 10 位时间戳
func GetTodayZeroTimestamp() int64 {
	// 获取当前时间
	now := time.Now()
	// 将时、分、秒和纳秒部分置为 0，得到今日 0 点的时间
	zeroTime := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
	// 将今日 0 点的时间转换为 10 位 Unix 时间戳
	return zeroTime.Unix()
}

func (l *StyleLog) FtpLogGer(log any) {

	var err error
	if l.creatTime != GetTodayZeroTimestamp() {
		l.NewLog(l.FtpId)
	}
	// 使用指定格式输出年月日
	formattedTime := time.Now().Unix()
	t := time.Unix(formattedTime, 0)
	formattedDate := t.Format("2006-01-02 15:04:05")
	formattedText := fmt.Sprintf("[%s] - %s \"%s\"\n",
		formattedDate,
		"FTPID:"+l.FtpId,
		log,
	)
	//fmt.Println("展示日志：", formattedText)
	_, err = l.File.WriteString(formattedText)
	if err != nil {
		fmt.Println("文件写入错误:", err)
	}
}

func (l *StyleLog) FtpLogGer2(log any, log2 any) {

	var err error
	if l.creatTime != GetTodayZeroTimestamp() {
		l.NewLog(l.FtpId)
	}
	// 使用指定格式输出年月日
	// 使用指定格式输出年月日
	formattedTime := time.Now().Unix()
	t := time.Unix(formattedTime, 0)
	formattedDate := t.Format("2006-01-02 15:04:05")
	/*jsonData, err := json.Marshal(log2)
	if err != nil {
	} else {
		log2 = jsonData
	}*/
	formattedText := fmt.Sprintf("[%s] - %s \"%s %s \"\n",
		formattedDate,
		"FTPID:"+l.FtpId,
		log,
		log2,
	)
	//fmt.Println("展示日志：", formattedText)
	_, err = l.File.WriteString(formattedText)
	if err != nil {
		fmt.Println("文件写入错误:", err)
	}
}

func (l *StyleLog) FtpLogGer3(log any, log2 any) {

	var err error
	if l.creatTime != GetTodayZeroTimestamp() {
		l.NewLog(l.FtpId)
	}
	// 使用指定格式输出年月日
	// 使用指定格式输出年月日
	formattedTime := time.Now().Unix()
	t := time.Unix(formattedTime, 0)
	formattedDate := t.Format("2006-01-02 15:04:05")
	jsonData, err := json.Marshal(log2)
	if err != nil {
		//fmt.Println(err.Error())
	} else {
		log2 = jsonData
	}
	formattedText := fmt.Sprintf("[%s] - %s \"%s %s \"\n",
		formattedDate,
		"FTPID:"+l.FtpId,
		log,
		jsonData,
	)
	//fmt.Println("展示日志：", formattedText)
	_, err = l.File.WriteString(formattedText)
	if err != nil {
		fmt.Println("文件写入错误:", err)
	}
}
